﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Public Class ObjektGabeleiste
    Dim KO As ObjektKO
    Shared Gabesterne() As Texture = {}
    Dim SternPositionen() As Point = {}
    Dim StartPosition As Point
    Const FrameMax As Integer = 12
    Private Frames As Integer
    Dim YGabePlus As Integer = 0
    Dim YSpezialgabeplus As Integer = 0
    Dim Veränderung As Integer = 1
    Enum Füllung
        Leer
        Halbvoll
        Voll
    End Enum
    Public Property Frame() As Integer
        Get
            Return Frames
        End Get
        Set(ByVal value As Integer)
            Frames += 1
            If Frames > FrameMax Then
                Frames = 0
            End If
        End Set
    End Property
    Public Sub New(ByVal neuKO As ObjektKO, ByVal Position As Point)
        KO = neuKO
        StartPosition = Position
        If Gabesterne.Length = 0 Then
            Array.Resize(Gabesterne, 9)
            Gabesterne(0) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\Sternklein.png")
            Gabesterne(1) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\SternKleinHalbvoll.png")
            Gabesterne(2) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\SternKleinVoll.png")
            Gabesterne(3) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\SternGroß.png")
            Gabesterne(4) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\SternGroßHalbvoll.png")
            Gabesterne(5) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\SternGroßVoll.png")
            Gabesterne(6) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\Gabe.png")
            Gabesterne(7) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\Spezial.png")
            Gabesterne(8) = Grafikengine.LoadTexture(My.Settings.Resourcenpfad + "Objekte\Doppelgabe.png")
        End If
        Array.Resize(SternPositionen, KO.Gabekosten + KO.SpezialgabeKosten)
        For I = 0 To KO.Gabekosten - 1
            SternPositionen(I) = Position
            Position.X += 9
        Next
        Position.Y -= 2
        For I2 = 0 To KO.SpezialgabeKosten - 1
            SternPositionen(I2 + KO.Gabekosten) = Position
            Position.X += 10
        Next
    End Sub
    Public Sub Malen()
        If Objektverwalter.Spielfeld.AktuellerSpieler.Team <> Objektverwalter.Spielfeld.Spieler(KO.Spieler).Team And KO.GabeleistenVerstecker = True Then
            'Manche KOS verstecken ihre Gabeleisten wir malen nichts =).
        Else
            Dim sngRotation As Double = 0
            Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
            Grafikengine.ptfRotCenter = Nothing
            If KO.Gabemodus = ObjektKO.Gabemodi.Keine Then
                If KO.KannGabe = True Or KO.KannSpezialGabe Then
                    YGabePlus += Veränderung
                    If YGabePlus > 3 Then
                        Veränderung = -1
                    ElseIf YGabePlus <= 0 Then
                        Veränderung = 1
                    End If
                Else
                    YGabePlus = 0
                End If
                If KO.KannSpezialGabe = True Then
                    If YGabePlus = 0 Then
                        YSpezialgabeplus = 3
                    ElseIf YGabePlus = 1 Then
                        YSpezialgabeplus = 2
                    ElseIf YGabePlus = 2 Then
                        YSpezialgabeplus = 1
                    ElseIf YGabePlus = 3 Then
                        YSpezialgabeplus = 0
                    End If
                End If
                With Grafikengine.szfScale
                    .Height = 8
                    .Width = 8
                End With
                With Grafikengine.ptfRotCenter
                    .X = 0
                    .Y = 0
                End With
                Dim SpezialGabeStart As Integer
                For I = 1 To KO.Gabekosten
                    Dim Füllgrad As Füllung = Füllung.Leer
                    If KO.Gabeleiste - I * KO.Sternkosten >= 0 Then
                        Füllgrad = Füllung.Voll
                    ElseIf KO.Gabeleiste - (I - 1) * KO.Sternkosten - KO.Sternkosten / 2 >= 0 Then
                        Füllgrad = Füllung.Halbvoll
                    End If
                    If Füllgrad > 0 Then
                        With Grafikengine.recBild
                            .X = 8 * Frame : .Width = 8
                            .Y = 0 : .Height = 8
                        End With
                    Else
                        With Grafikengine.recBild
                            .X = 0 : .Width = 8
                            .Y = 0 : .Height = 8
                        End With
                    End If
                    Grafikengine.ptfPosition = SternPositionen(I - 1)
                    Grafikengine.ptfPosition.Y -= YGabePlus
                    Grafikengine.Sprite.Draw2D(Gabesterne(Füllgrad), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                    SpezialGabeStart = I
                Next
                With Grafikengine.szfScale
                    .Height = 10
                    .Width = 9
                End With
                For I = 1 To KO.SpezialgabeKosten
                    Dim Füllgrad As Füllung = Füllung.Leer
                    If KO.Gabeleiste - (I + KO.Gabekosten) * KO.Sternkosten >= 0 Then
                        Füllgrad = Füllung.Voll
                    ElseIf KO.Gabeleiste - (I - 1 + KO.Gabekosten) * KO.Sternkosten - KO.Sternkosten / 2 >= 0 Then
                        Füllgrad = Füllung.Halbvoll
                    End If
                    If Füllgrad > 0 Then
                        With Grafikengine.recBild
                            .X = 9 * Frame : .Width = 9
                            .Y = 0 : .Height = 10
                        End With
                    Else
                        With Grafikengine.recBild
                            .X = 0 : .Width = 9
                            .Y = 0 : .Height = 10
                        End With
                    End If
                    Grafikengine.ptfPosition = SternPositionen(I - 1 + KO.Gabekosten)
                    Grafikengine.ptfPosition.Y -= YSpezialgabeplus
                    Grafikengine.Sprite.Draw2D(Gabesterne(Füllgrad + 3), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                Next
            ElseIf KO.Gabemodus = ObjektKO.Gabemodi.Gabe Then
                Grafikengine.szfScale = Nothing
                Grafikengine.ptfRotCenter = Nothing
                With Grafikengine.recBild
                    .X = 28 * Frame : .Width = 28
                    .Y = 0 : .Height = 9
                End With
                Grafikengine.ptfPosition = StartPosition
                Grafikengine.ptfPosition.Y -= 2
                If SternPositionen(0).X > SternPositionen(1).X Then
                    Grafikengine.ptfPosition.X -= 26
                End If
                Grafikengine.Sprite.Draw2D(Gabesterne(6), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            ElseIf KO.Gabemodus = ObjektKO.Gabemodi.Spezialgabe Then
                Grafikengine.szfScale = Nothing
                Grafikengine.ptfRotCenter = Nothing
                With Grafikengine.recBild
                    .X = 46 * Frame : .Width = 46
                    .Y = 0 : .Height = 9
                End With
                Grafikengine.ptfPosition = StartPosition
                Grafikengine.ptfPosition.Y -= 2
                If SternPositionen(0).X > SternPositionen(1).X Then
                    Grafikengine.ptfPosition.X -= 46
                End If
                Grafikengine.Sprite.Draw2D(Gabesterne(7), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            ElseIf KO.Gabemodus = ObjektKO.Gabemodi.Doppelgabe Then
                Grafikengine.szfScale = Nothing
                Grafikengine.ptfRotCenter = Nothing
                With Grafikengine.recBild
                    .X = 53 * Frame : .Width = 53
                    .Y = 0 : .Height = 30
                End With
                Grafikengine.ptfPosition = StartPosition
                Grafikengine.ptfPosition.Y -= 2
                If SternPositionen(0).X > SternPositionen(1).X Then
                    Grafikengine.ptfPosition.X -= 53
                End If
                Grafikengine.Sprite.Draw2D(Gabesterne(8), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            End If
            Frame = 2
        End If
    End Sub
    Public Sub Spiegeln(ByVal X As Integer)
        Dim Position As New Point(X, StartPosition.Y)
        StartPosition = Position
        If SternPositionen.Length > 1 Then
            If SternPositionen(0).X < SternPositionen(1).X Then
                For I = 0 To KO.Gabekosten - 1
                    SternPositionen(I) = Position
                    Position.X -= 9
                Next
                Position.Y -= 2
                For I2 = 0 To KO.SpezialgabeKosten - 1
                    SternPositionen(I2 + KO.Gabekosten) = Position
                    Position.X -= 10
                Next

            Else
                For I = 0 To KO.Gabekosten - 1
                    SternPositionen(I) = Position
                    Position.X += 9
                Next
                Position.Y -= 2
                For I2 = 0 To KO.SpezialgabeKosten - 1
                    SternPositionen(I2 + KO.Gabekosten) = Position
                    Position.X += 10
                Next

            End If
        End If
    End Sub
End Class
